'use strict';

module.exports = {
	/**
	 * [empty 验证是否为空]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   str [description]
	 * @return    {[type]}       [description]
	 */
	empty:function(data){
		if(!data)
			return true;
		return data.length < 0;
	},
	/**
	 * [isnum 是否为数字]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {[type]}       [description]
	 */
	isNum:function(val){
		let reg = /^[0-9]+$/;
		if(!val)
			return false;
		return val && reg.test(val);
	},
	/**
	 * [isalpha 是否字母]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {[type]}       [description]
	 */
	isAlpha:function(val){
		let reg = /^[a-zA-Z]*$/; 
		if(!val)
			return false;
		return val && reg.test(val);
	},
	/**
	 * [ischinese 只能是汉字]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {[type]}       [description]
	 */
	isChinese:function(val){
		let reg = /^[\u0391-\uFFE5]+$/;
		if(!val)
			return false; 
		return val && reg.test(val);
	},
	/**
	 * [length 长度限制]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val   [description]
	 * @param     {Number}   start [description]
	 * @param     {Number}   end   [description]
	 * @return    {[type]}         [description]
	 */
	length:function(val,start,end){
		start = start || 0;
		end = end || 0;
		if(val && val.length > end)
			return false;
		if(val && val.length < start)
			return false;
		return true;
	},
	/**
	 * [isalphanum 只能是英文字母或数字]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {[type]}       [description]
	 */
	isAlphaNum:function(val){
		let reg = /^[0-9a-zA-Z]*$/;
		if(!val)
			return false;
		return reg.test(val);
	},
	/**
	 * [isPhone 是否合法的手机号]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {Boolean}      [description]
	 */
	isPhone:function(val){
		if(!val)
			return false;
		let reg = /^(1[3456789][0-9]{9})$/;
		return reg.test(val);
	},
	/**
	 * [isCardId 是否身份证号码]
	 * @Author    como
	 * @DateTime  2018-12-18
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   val [description]
	 * @return    {Boolean}      [description]
	 */
	isCardId:function(val){
		if(!val)
			return false;
		let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
		return reg.test(val);
	},
	/**
	 * [isObj 是否对象]
	 * @Author    como
	 * @DateTime  2019-06-26
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   obj [description]
	 * @return    {Boolean}      [description]
	 */
	isObj:function(obj){
		if(!obj)
			return false;
		return obj.constructor == Object;
	},
	/**
	 * [changeFivteenToEighteen 15位转18位身份证号]
	 * @author 	   szjcomo
	 * @createTime 2020-06-03
	 * @param      {[type]}   idcard [description]
	 * @return     {[type]}          [description]
	 */
	changeFivteenToEighteen:function(idcard) {  
		let ereg = '';
		if ((parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ 
			ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性 
		} else { 
			ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性 
		} 
		return ereg.test(idcard); 
	},
	/**
	 * [checkIsIdentity 检测身份证号码的合法性]
	 * @Author    como
	 * @DateTime  2019-06-06
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @param     {[type]}   idcardno [description]
	 * @return    {[type]}            [description]
	 */
	checkIdentity:function(idcardno){
		let that = this;
		try{
			let idcard_array 	= idcardno.split("");
			let JYM 			= "10X98765432";
			let area = {11 : "北京",12 : "天津",13 : "河北",14 : "山西",15 : "内蒙古",21 : "辽宁",22 : "吉林",23 : "黑龙江",31 : "上海",32 : "江苏",33 : "浙江",34 : "安徽",35 : "福建",36 : "江西",37 : "山东",41 : "河南",42 : "湖北",43 : "湖南",44 : "广东",45 : "广西",46 : "海南",50 : "重庆",51 : "四川",52 : "贵州",53 : "云南",54 : "西藏",61 : "陕西",62 : "甘肃",63 : "青海",64 : "宁夏",65 : "新疆",71 : "台湾",81 : "香港",82 : "澳门",91 : "国外"};
			if(idcardno.length == 15) return that.changeFivteenToEighteen(idcardno);
			let ereg = /^[1-9][0-9]{5}[1-2][(0|9)][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式 
			if (parseInt(idcardno.substr(6, 4)) % 4 == 0
					|| (parseInt(idcardno.substr(6, 4)) % 100 == 0 && parseInt(idcardno
							.substr(6, 4)) % 4 == 0)) {
				ereg = /^[1-9][0-9]{5}[1-2][(0|9)][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式 
			}
			if (ereg.test(idcardno)) {//测试出生日期的合法性 
				//计算校验位 
				let S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10]))
						* 7
						+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11]))
						* 9
						+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))
						* 10
						+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13]))
						* 5
						+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14]))
						* 8
						+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15]))
						* 4
						+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16]))
						* 2
						+ parseInt(idcard_array[7])
						* 1
						+ parseInt(idcard_array[8])
						* 6
						+ parseInt(idcard_array[9]) * 3;
				let Y 	= S % 11;
				let M 	= "F";
				M 		= JYM.substr(Y,1);//判断校验位
				if (area[parseInt(idcardno.substr(0, 2))] == null) {
					return -1;
				}
				if (M == idcard_array[17]) {
					return true;
				} else {
					return -2;
				}
			} else {
				return -3;
			}				
		} catch(err){
			console.error(err.message);
			return -4;
		}
	},
	/**
	 * [isMobile 检测是否手机端访问]
	 * @Author    como
	 * @DateTime  2019-06-20
	 * @copyright 思智捷管理系统
	 * @version   [1.5.0]
	 * @return    {Boolean}  [description]
	 */
	isMobile:function(){
		let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
		return flag;
	},
	/**
	 * [isAndroid 是否是安卓手机]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @return   {Boolean}  [description]
	 */
	isAndroid:function(){
		try{
	        let ua = navigator.userAgent.toLowerCase();
	        //Android终端
	        let isAndroid = ua.indexOf('Android') > -1 || ua.indexOf('Adr') > -1;
	        return isAndroid;   
		} catch(err){
			console.error(err.message);
			return false;
		}
	},
	/**
	 * [isTel 是否固定电话]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @param    {[type]}   str [description]
	 * @return   {Boolean}      [description]
	 */
	isTel:function(str){
		return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
	},
	/**
	 * [isQQ 是否qq号码]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @param    {[type]}   str [description]
	 * @return   {Boolean}      [description]
	 */
	isQQ:function(str){
		return /^[1-9][0-9]{4,9}$/.test(str);
	},
	/**
	 * [isEmail 是否邮箱]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @param    {[type]}   str [description]
	 * @return   {Boolean}      [description]
	 */
	isEmail:function(str){
		return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
	},
	/**
	 * [isURL 是否网址]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @param    {[type]}   str [description]
	 * @return   {Boolean}      [description]
	 */
	isURL:function(str){
		return /(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
	},
	/**
	 * [isArray 是否数组]
	 * @Author   szjcomo
	 * @DateTime 2019-09-16
	 * @param    {[type]}   arr [description]
	 * @return   {Boolean}      [description]
	 */
	isArray:function(arr){
		return arr instanceof Array;
	},
    /**
     * [inArray 判断是否在数组中]
     * @Author   szjcomo
     * @DateTime 2019-09-16
     * @param    {[type]}   arr [description]
     * @param    {[type]}   obj [description]
     * @return   {[type]}       [description]
     */
    inArray:function(arr,val){
    	return arr.indexOf(val) != -1 ? true : false;
    },
    /**
     * [isFunction 判断是否为函数]
     * @Author   szjcomo
     * @DateTime 2019-09-21
     * @param    {[type]}   mixed [description]
     * @return   {Boolean}        [description]
     */
    isFunction:function(mixed){
    	return Object.prototype.toString.call(mixed).slice(8, -1) === 'Function';
    },
    /**
     * [isset 判断变量是否定义]
     * @Author   szjcomo
     * @DateTime 2019-09-21
     * @param    {[type]}   mixed [description]
     * @return   {[type]}         [description]
     */
    isset:function(mixed){
    	return Object.prototype.toString.call(mixed).slice(8, -1) === 'Undefined';
    }
};